/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.elcom.emocbc.dbmapping.persistence;

import com.elcom.emocbc.dbmapping.tables.Cell;
import com.elcom.emocbc.dbmapping.tables.daos.CellDao;
import java.sql.Connection; 
import java.sql.SQLException;
import java.util.List;
import org.jooq.Configuration;
import org.jooq.ConnectionProvider;
import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.conf.Settings;
import org.jooq.conf.StatementType;
import org.jooq.impl.DSL;
import org.jooq.impl.DefaultConfiguration;

/**
 *
 * @author GiangLT
 */
public class CellPersistence extends CellDao {

    public CellPersistence() throws SQLException {
        ConnectionProvider connectionProvider = new DbConnectionProvider();
        Settings settings = new Settings();
        settings.setStatementType(StatementType.STATIC_STATEMENT);
        Configuration configuration = new DefaultConfiguration()
                .set(connectionProvider)
                .set(SQLDialect.ORACLE)
                .set(settings);
        this.setConfiguration(configuration);
        
    }
    private final Cell CELL = Cell.CELL;
//
//    public List<CellRecord> getCellsFromCellKey(String zoneName) throws SQLException {
//        Connection con = dbAccess.getConnection();
//        final ZoneCell ZONE_CELL = ZoneCell.ZONE_CELL;
//        final Zone ZONE = Zone.ZONE;
//        try {
//            DSLContext context = DSL.using(con, SQLDialect.ORACLE);
//            return context
//                    .selectFrom(CELL.join(ZONE_CELL).using(CELL.CELL_KEY)
//                                    .join(ZONE).on(ZONE_CELL.ZONE_ID.eq(ZONE.ZONE_ID)))
//                    .where(ZONE.ZONE_NAME.equal(zoneName))
//                    .fetch();
//        } finally {
//            DbAccess.closeConnection(con);
//        }
//    }
//    public List<CellRecord> getCellParamFromZoneName(String zoneName) throws SQLException {
//        Connection con = dbAccess.getConnection();
//        String sql =
//                "select C.BSC_ID, C.CELL_ID, C.LAC "
//                + " FROM CELL C "
//                + " inner join ZONE_CELL ZC on C.CELL_KEY = ZC.CELL_KEY "
//                + " inner join ZONE Z on Z.ZONE_ID = ZC.ZONE_ID "
//                + " where Z.ZONE_NAME = ?";
//        PreparedStatement ps = null;
//        ResultSet rs = null;
//        try {
//            ps = con.prepareCall(sql);
//            ps.setString(1, zoneName);
//            rs = ps.executeQuery();
//            List<CellRecord> result = new ArrayList<CellRecord>();
//            while (rs.next()) {
//                String bscId = rs.getString(1);
//                String cellId = rs.getString(2);
//                String lac = rs.getString(3);
//
//                CellRecord cellRecord = new CellRecord();
//                cellRecord.setBscId(bscId);
//                cellRecord.setCellId(cellId);
//                cellRecord.setLac(lac);
//                result.add(cellRecord);
//            }
//            return result;
//        } finally {
//            DbAccess.closeResultSet(rs);
//            DbAccess.closePreparedStatement(ps);
//            DbAccess.closeConnection(con);
//        }
//    }
//

    public int deleteAllCellsOfBsc(String bscId) throws SQLException {
        Connection con = DbAccess.getInstance().getConnection();
        try {
            DSLContext context = DSL.using(con, SQLDialect.ORACLE);
            return context.delete(CELL).where(CELL.BSC_ID.equal(bscId)).execute();
        } finally {
            DbAccess.commitTransaction(con);
            DbAccess.closeConnection(con);
        }
    }
    
    public int countByBscId(String bscId) throws SQLException {
        Connection con = DbAccess.getInstance().getConnection();
        try {
            DSLContext context = DSL.using(con, SQLDialect.ORACLE);
            return context.selectFrom(CELL).where(CELL.BSC_ID.eq(bscId)).fetchCount();
        } finally {
            DbAccess.closeConnection(con);
        }
    }
    
    public List<com.elcom.emocbc.dbmapping.tables.pojos.Cell> findByBscId(String bscId) throws SQLException {
        Connection con = DbAccess.getInstance().getConnection();
        try {
            DSLContext context = DSL.using(con, SQLDialect.ORACLE);
            return context.selectFrom(CELL).where(CELL.BSC_ID.eq(bscId)).fetchInto(com.elcom.emocbc.dbmapping.tables.pojos.Cell.class);
        } finally {
            DbAccess.closeConnection(con);
        }
    }
//
//    @Override
//    protected String getInsertSql(CellRecord cellRecord, DSLContext context) throws SQLException {
//        List values = new ArrayList();
//        values.add(cellRecord.getLac() + cellRecord.getCellId());
//        values.add(cellRecord.getBscId());
//        values.add(cellRecord.getCellId());
//        values.add(cellRecord.getCellName());
//        values.add(cellRecord.getCreatedDate());
//        values.add(cellRecord.getDescription());
//        values.add(cellRecord.getGatewayId());
//        values.add(cellRecord.getLac());
//        values.add(cellRecord.getLatitude());
//        values.add(cellRecord.getLongitude());
//        values.add(cellRecord.getMcc());
//        values.add(cellRecord.getMnc());
//        values.add(cellRecord.getRadius());
//        values.add(cellRecord.getShape());
//        values.add(cellRecord.getStatus());
//        values.add(cellRecord.getStatusDecription());
//        values.add(cellRecord.getUpdatedDate());
//        values.add(cellRecord.getUserId());
//
//        return context.insertInto(CELL,
//                CELL.CELL_KEY,
//                CELL.BSC_ID,
//                CELL.CELL_ID,
//                CELL.CELL_NAME,
//                CELL.CREATED_DATE,
//                CELL.DESCRIPTION,
//                CELL.GATEWAY_ID,
//                CELL.LAC,
//                CELL.LATITUDE,
//                CELL.LONGITUDE,
//                CELL.MCC,
//                CELL.MNC,
//                CELL.RADIUS,
//                CELL.SHAPE,
//                CELL.STATUS,
//                CELL.STATUS_DECRIPTION,
//                CELL.UPDATED_DATE,
//                CELL.USER_ID).values(values).getSQL(true);
//    }
}
